package com.uade.test;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.uade.model.Articulo;
import com.uade.model.ArticuloElectrodomestico;
import com.uade.model.ArticuloModa;
import com.uade.model.ArticuloMueble;
import com.uade.model.ArticuloInfantil;
import com.uade.model.Modelo;

public class ArticuloHandler extends DefaultHandler {

	private static Logger log = Logger.getLogger(ArticuloHandler.class);
	// List to hold Articulos object
	private List<Articulo> articuloList = null;
	private Articulo articulo = null;

	// getter method for articulo list
	public List<Articulo> getArticuloList() {
		return articuloList;
	}

	boolean bcodigo = false;
	boolean bcodigoDeposito = false;
	boolean bnombre = false;
	boolean bdescripcion = false;
	boolean bmarca = false;
	boolean borigen = false;
	boolean bprecio = false;
	boolean btipo = false;
	boolean bfecha = false;
	boolean bfotoURL = false;
	boolean bcolor = false;
	boolean bedadRecomendada = false;
	boolean bfichaTecnica = false;
	boolean btalle = false;
	boolean bmaterial = false;
	String scodigo = null;
	String scodigoDeposito = null;
	String snombre = null;
	String sdescripcion = null;
	String smarca = null;
	String sorigen = null;
	String sprecio = null;
	String stipo = null;
	String sfecha = null;
	String sfotoURL = null;
	String scolor = null;
	String sedadRecomendada = null;
	String sfichaTecnica = null;
	String stalle = null;
	String smaterial = null;

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {

		if (qName.equalsIgnoreCase("Articulo")) {
			if (articuloList == null)
				articuloList = new ArrayList<Articulo>();
		}

		if (qName.equalsIgnoreCase("CODIGO")) {
			bcodigo = true;
		}

		if (qName.equalsIgnoreCase("CODIGODEPOSITO")) {
			bcodigoDeposito = true;
		}

		if (qName.equalsIgnoreCase("NOMBRE")) {
			bnombre = true;
		}

		if (qName.equalsIgnoreCase("DESCRIPCION")) {
			bdescripcion = true;
		}
		if (qName.equalsIgnoreCase("MARCA")) {
			bmarca = true;
		}
		if (qName.equalsIgnoreCase("ORIGEN")) {
			borigen = true;
		}
		if (qName.equalsIgnoreCase("PRECIO")) {
			bprecio = true;
		}
		if (qName.equalsIgnoreCase("TIPO")) {
			btipo = true;
		}
		if (qName.equalsIgnoreCase("FECHA")) {
			bfecha = true;
		}
		if (qName.equalsIgnoreCase("FOTOURL")) {
			bfotoURL = true;
		}
		if (qName.equalsIgnoreCase("COLOR")) {
			bcolor = true;
		}
		if (qName.equalsIgnoreCase("EDADRECOMENDADA")) {
			bedadRecomendada = true;
		}
		if (qName.equalsIgnoreCase("FICHATECNICA")) {
			bfichaTecnica = true;
		}
		if (qName.equalsIgnoreCase("TALLE")) {
			btalle = true;
		}
		if (qName.equalsIgnoreCase("MATERIAL")) {
			bmaterial = true;
		}
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if (qName.equalsIgnoreCase("Articulo")) {

			if (stipo.equals(Modelo.electrodomestico.toString())) {
				articulo = new ArticuloElectrodomestico(
						Long.valueOf(scodigo),
						(int) Integer.valueOf(scodigoDeposito),
						stipo/* categoria */, snombre, sdescripcion, smarca,
						Double.valueOf(sprecio), sfotoURL/* foto */, sorigen,
						null/* disponibilidad */, null/* ranking */,
						sfichaTecnica, sfecha);
			}else if(stipo.equals(Modelo.infantil.toString())){
				articulo = new ArticuloInfantil(Long.valueOf(scodigo),
						Integer.valueOf(scodigoDeposito),
						stipo/* categoria */, snombre, sdescripcion, smarca, Double.valueOf(sprecio), sfotoURL/* foto */, sorigen,
						null/* disponibilidad */, null/* ranking */, sedadRecomendada, sfecha);
			}else if(stipo.equals(Modelo.mueble.toString())){
				articulo = new ArticuloMueble(Long.valueOf(scodigo),
						Integer.valueOf(scodigoDeposito),
						stipo/* categoria */, snombre, sdescripcion, smarca, Double.valueOf(sprecio), sfotoURL/* foto */, sorigen,
						null/* disponibilidad */, null/* ranking */, smaterial, sfecha);
			}else if(stipo.equals(Modelo.moda.toString())){
				articulo = new ArticuloModa(Long.valueOf(scodigo),
						Integer.valueOf(scodigoDeposito),
						stipo/* categoria */, snombre, sdescripcion, smarca, Double.valueOf(sprecio), sfotoURL/* foto */, sorigen,
						null/* disponibilidad */, null/* ranking */, stalle,scolor, sfecha);
			}

			articuloList.add(articulo);
		}
	}

	@Override
	public void characters(char ch[], int start, int length)
			throws SAXException {

		if (bcodigo) {
			bcodigo = false;
			scodigo = new String(ch, start, length);
			log.debug("Codigo : " + scodigo);

		}

		if (bcodigoDeposito) {
			bcodigoDeposito = false;
			scodigoDeposito = new String(ch, start, length);
			log.debug("Codigo deposito : " + scodigoDeposito);
		}

		if (bnombre) {
			bnombre = false;
			snombre = new String(ch, start, length);
			log.debug("Nombre : " + snombre);
		}

		if (bdescripcion) {
			bdescripcion = false;
			sdescripcion = new String(ch, start, length);
			log.debug("Descripcion : " + sdescripcion);
		}

		if (bmarca) {
			bmarca = false;
			smarca = new String(ch, start, length);
			log.debug("Marca : " + smarca);
		}

		if (borigen) {
			borigen = false;
			sorigen = new String(ch, start, length);
			log.debug("Origen : " + sorigen);
		}

		if (bprecio) {
			bprecio = false;
			sprecio = new String(ch, start, length);
			log.debug("Precio : " + sprecio);
		}

		if (btipo) {
			btipo = false;
			stipo = new String(ch, start, length);
			log.debug("Tipo : " + stipo);
		}

		if (bfecha) {
			bfecha = false;
			sfecha = new String(ch, start, length);
			log.debug("fecha : " + sfecha);
		}
		if (bfotoURL) {
			bfotoURL = false;
			sfotoURL = new String(ch, start, length);
			log.debug("FotoURL : " + sfotoURL);

		}
		if (bcolor) {
			bcolor = false;
			scolor = new String(ch, start, length);
			log.debug("Color : " + scolor);
		}

		if (bedadRecomendada) {
			bedadRecomendada = false;
			sedadRecomendada = new String(ch, start, length);
			log.debug("EdadRecomendada : " + sedadRecomendada);
		}

		if (bfichaTecnica) {
			bfichaTecnica = false;
			sfichaTecnica = new String(ch, start, length);
			log.debug("FichaTecnica : " + sfichaTecnica);
		}

		if (btalle) {
			btalle = false;
			stalle = new String(ch, start, length);
			log.debug("Talle : " + stalle);
		}

		if (bmaterial) {
			bmaterial = false;
			smaterial = new String(ch, start, length);
			log.debug("Material : " + smaterial);
		}
	}

	
}